#ifndef __UILABEL_H__
#define __UILABEL_H__

#pragma once

#define _USE_GDIPLUS 1

#ifdef _USE_GDIPLUS
#include <GdiPlus.h>
#pragma comment( lib, "GdiPlus.lib" )
// UMU: DO NOT use "using namespace" in .h file
//using namespace Gdiplus;
class DUILIB_API Gdiplus::RectF;
struct DUILIB_API Gdiplus::GdiplusStartupInput;

using Gdiplus::RectF;
using Gdiplus::GdiplusStartupInput;
#endif


namespace DuiLib
{
    class DUILIB_API CLabelUI : public CControlUI
    {
    public:
        CLabelUI();
        ~CLabelUI();

        LPCTSTR GetClass() const;
        LPVOID GetInterface(LPCTSTR pstrName);

        void SetFixedWidth(int cx);
        void SetFixedHeight(int cy);
        void SetText(LPCTSTR pstrText);

        void SetTextStyle(UINT uStyle);
        UINT GetTextStyle() const;
        bool IsMultiLine();
        void SetMultiLine(bool bMultiLine = true);
        void SetTextColor(DWORD dwTextColor);
        DWORD GetTextColor() const;
        void SetDisabledTextColor(DWORD dwTextColor);
        DWORD GetDisabledTextColor() const;
        void SetFont(int index);
        int GetFont() const;
        RECT GetTextPadding() const;
        void SetTextPadding(RECT rc);
        bool IsShowHtml();
        void SetShowHtml(bool bShowHtml = true);

        SIZE EstimateSize(SIZE szAvailable);
        void DoEvent(TEventUI& event);
        void SetAttribute(LPCTSTR pstrName, LPCTSTR pstrValue);

        void PaintText(HDC hDC);

#ifdef _USE_GDIPLUS
        void		SetEnabledEffect(bool _EnabledEffect);
        bool		GetEnabledEffect();
        void		SetEnabledLuminous(bool bEnableLuminous);
        bool		GetEnabledLuminous();
        void		SetLuminousFuzzy(float fFuzzy);
        float		GetLuminousFuzzy();
        void		SetGradientLength(int _GradientLength);
        int			GetGradientLength();
        void		SetShadowOffset(int _offset, int _angle);
        RectF		GetShadowOffset();
        void		SetTextColor1(DWORD _TextColor1);
        DWORD		GetTextColor1();
        void		SetTextShadowColorA(DWORD _TextShadowColorA);
        DWORD		GetTextShadowColorA();
        void		SetTextShadowColorB(DWORD _TextShadowColorB);
        DWORD		GetTextShadowColorB();
        void		SetStrokeColor(DWORD _StrokeColor);
        DWORD		GetStrokeColor();
        void		SetGradientAngle(int _SetGradientAngle);
        int			GetGradientAngle();
        void		SetEnabledStroke(bool _EnabledStroke);
        bool		GetEnabledStroke();
        void		SetEnabledShadow(bool _EnabledShadowe);
        bool		GetEnabledShadow();
#endif

    protected:
        LPWSTR  m_pWideText;
        DWORD	m_dwTextColor;
        DWORD	m_dwDisabledTextColor;
        int		m_iFont;
        UINT	m_uTextStyle;
        RECT	m_rcTextPadding;
        bool	m_bShowHtml;
        SIZE    m_szAvailableLast;
        SIZE    m_cxyFixedLast;
        bool    m_bNeedEstimateSize;

        float					m_fLuminousFuzzy;
        int						m_GradientLength;
        int						m_GradientAngle;
        bool					m_EnableEffect;
        bool					m_bEnableLuminous;
        bool					m_EnabledStroke;
        bool					m_EnabledShadow;
        DWORD					m_dwTextColor1;
        DWORD					m_dwTextShadowColorA;
        DWORD					m_dwTextShadowColorB;
        DWORD					m_dwStrokeColor;
        RectF					m_ShadowOffset;
        ULONG_PTR				m_gdiplusToken;
#ifdef _USE_GDIPLUS
        GdiplusStartupInput		m_gdiplusStartupInput;
#endif
    };
}

#endif // __UILABEL_H__